package com.jinxi.sign.mode.factory.simple;

/**
 * @Autho changqi.wu
 * @Date 路在脚下，使劲踩！
 */
public class MicroFactory {

    /**
     * 根据名称创建对象
     *
     * @param name
     * @return
     */
    public MicroIT createByName(String name) {
        if ("fls-small".equals(name)) {
            return new FlsSmall();
        } else if ("fls-meam".equals(name)) {
            return new FlsMeam();
        } else if ("fls-dclub".equals(name)) {
            return new FlsDclub();
        } else {
            return null;
        }
    }

    /**
     * 根据名称创建对象
     *
     * @param name
     * @return
     */
    public MicroIT createByType(String name) {
        try {
            if (name != null && !"".equals(name)) {
                return (MicroIT) Class.forName(name).newInstance();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }


    /**
     * @param clazz
     * @return
     */
    public MicroIT createByType(Class<? extends MicroIT> clazz) {
        try {
            return clazz.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}


/**

 不属于gof 23种设计模式

 简单工厂模式适用场景
    工厂类负责创建的对象较少。
    客户端只需要传入工厂类参数，对于如何创建对象的逻辑不需要关心
 优点：
    只需要传入一个正确的参数，就可以获取你所需的对象，无需知道其创建的细节

 缺点：
    工厂类职责相对较重，增加新的产品时，需要修改工厂类的判断逻辑，违背开闭原则
    不利于扩展过于复杂的产品结构



 日志

 **/